import {
    validatenull,
} from './validate';
import {
    baseUrl,
} from '@/config/env';

import website from '@/const/website';


export const guid = () => {
    function S4() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    }
    return (`${S4() + S4() }${ S4() }${S4()}${S4() }${S4()}${S4()}${S4()}`);
};
/**
 * 获取字典
 */
export const setDic = (dicData, DIC) => (typeof(dicData) === 'string') ? DIC : dicData;
/**
 * 设置px
 */
export const setPx = (val, defval) => {
    if (validatenull(val)) {
        val = defval;
    }
    val += '';
    if (val.indexOf('%') == -1) {
        val += 'px';
    }
    return val;
};
/**
 * 动态获取组件
 */
export const getComponent = (type) => {
    if (type == 'select') {
        return 'crudSelect';
    } else if (type == 'radio') {
        return 'crudRadio';
    } else if (type == 'checkbox') {
        return 'crudCheckbox';
    } else if (type == 'date') {
        return 'crudDate';
    }
    return 'crudInput';
};
/**
 * 加密处理
 */
export const encryption = (params) => {
    const {
        data,
        type,
        param,
        key,
    } = params;
    const result = JSON.parse(JSON.stringify(data));
    if (type == 'Base64') {
        param.forEach((ele) => {
            result[ele] = btoa(result[ele]);
        });
    } else if (type == 'Aes') {
        param.forEach((ele) => {
            result[ele] = CryptoJS.AES.encrypt(result[ele], key).toString();
        });
    }
    return result;
};

/**
 * 设置浏览器头部标题
 */
export const setTitle = function(title) {
    title = title ? `${title}——${website.title}` : `${website.title}`;
    window.document.title = title;
};
/**
 * 浏览器判断是否全屏
 */
export const fullscreenToggel = () => {
    if (fullscreenEnable()) {
        exitFullScreen();
    } else {
        reqFullScreen();
    }
};
/**
 * esc监听全屏
 */
export const listenfullscreen = (callback) => {
    function listen() {
        callback();
    }
    document.addEventListener('fullscreenchange', (e) => {
        listen();
    });
    document.addEventListener('mozfullscreenchange', (e) => {
        listen();
    });
    document.addEventListener('webkitfullscreenchange', (e) => {
        listen();
    });
    document.addEventListener('msfullscreenchange', (e) => {
        listen();
    });
};
/**
 * 浏览器判断是否全屏
 */
export const fullscreenEnable = () => {
    const isFullscreen = document.fullscreenEnabled ||
        window.fullScreen ||
        document.mozFullscreenEnabled ||
        document.webkitIsFullScreen;
    return isFullscreen;
};

/**
 * 浏览器全屏
 */
export const reqFullScreen = () => {
    if (document.documentElement.requestFullScreen) {
        document.documentElement.requestFullScreen();
    } else if (document.documentElement.webkitRequestFullScreen) {
        document.documentElement.webkitRequestFullScreen();
    } else if (document.documentElement.mozRequestFullScreen) {
        document.documentElement.mozRequestFullScreen();
    }
};
/**
 * 浏览器退出全屏
 */
export const exitFullScreen = () => {
    if (document.documentElement.requestFullScreen) {
        document.exitFullScreen();
    } else if (document.documentElement.webkitRequestFullScreen) {
        document.webkitCancelFullScreen();
    } else if (document.documentElement.mozRequestFullScreen) {
        document.mozCancelFullScreen();
    }
};
/**
 * 递归寻找子类的父类
 */

export const findParent = (menu, id) => {
    for (let i = 0; i < menu.length; i++) {
        if (menu[i].children.length != 0) {
            for (let j = 0; j < menu[i].children.length; j++) {
                if (menu[i].children[j].id == id) {
                    return menu[i];
                }
                if (menu[i].children[j].children.length != 0) {
                    return findParent(menu[i].children[j].children, id);
                }
            }
        }
    }
};

/**
 * 总体路由处理器
 */
export const resolveUrlPath = (url, name) => {
    let reqUrl = url;
    if (url.indexOf('http') != -1 || url.indexOf('https') != -1) {
        reqUrl = `/myiframe/urlPath?src=${reqUrl}&name=${name}`;
    } else {
        reqUrl = `${reqUrl}`;
    }
    return reqUrl;
};
/**
 * 总体路由设置器
 */
export const setUrlPath = ($route) => {
    let value = '';
    if ($route.query.src) {
        value = $route.query.src;
    } else {
        value = $route.path;
    }
    return value;
};
/**
 * 动态插入css
 */

export const loadStyle = (url) => {
    const link = document.createElement('link');
    link.type = 'text/css';
    link.rel = 'stylesheet';
    link.href = url;
    const head = document.getElementsByTagName('head')[0];
    head.appendChild(link);
};
/**
 * 根据字典的value显示label
 */
export const findByvalue = (dic, value) => {
    let result = '';
    if (validatenull(dic)) return value;
    if (typeof(value) === 'string' || typeof(value) === 'number' || typeof(value) === 'boolean') {
        let index = 0;
        index = findArray(dic, value);
        if (index != -1) {
            result = dic[index].label;
        } else {
            result = value;
        }
    } else if (value instanceof Array) {
        result = [];
        let index = 0;
        value.forEach((ele) => {
            index = findArray(dic, ele);
            if (index != -1) {
                result.push(dic[index].label);
            } else {
                result.push(value);
            }
        });
        result = result.toString();
    }
    return result;
};
/**
 * 根据字典的value查找对应的index
 */
export const findArray = (dic, value) => {
    for (let i = 0; i < dic.length; i++) {
        if (dic[i].value == value) {
            return i;
            break;
        }
    }
    return -1;
};
/**
 * 生成随机len位数字
 */
export const randomLenNum = (len, date) => {
    let random = '';
    random = Math.ceil(Math.random() * 100000000000000).toString().substr(0, len || 4);
    if (date) random += Date.now();
    return random;
};